package files;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes;
import java.nio.file.attribute.FileTime;

/**
 * 1、获取 java.nio.file.Path 实例所表示的 项目 ( 文件 或 目录 ) 的属性( atrribute )
 * 2、java.nio.file.attribute.BasicFileAttributes 表示 文件或目录 的基本属性
 * 3、java.nio.file.Files 类中提供了大量的 类方法 用于实现对 Path 的相关操作
 */
public class PathTest3 {

	public static void main(String[] args) throws IOException {
		
		// JDK 11 中 为 Path 接口定义了一个 static 方法用于获取 Path 类型的实例
		Path path = Path.of( "src" , "files" , "PathTest3.java" );
		System.out.println( path );
		
		System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" );
		
		// 获取 path 所表示的路径 对应的 文件或目录 的基本属性
		BasicFileAttributes basicAttributes = Files.readAttributes( path, BasicFileAttributes.class );
		
		FileTime creation = basicAttributes.creationTime(); // 获取创建时间
		System.out.println( "创建时间: " + creation );
		
		FileTime lastModified = basicAttributes.lastModifiedTime() ; // 获取更新时间
		System.out.println( "最后修改时间: " + lastModified );
		
		FileTime lastAccess = basicAttributes.lastAccessTime() ; // 获取访问时间
		System.out.println( "最后访问时间: " + lastAccess );
		
		System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" );
		
		System.out.println( basicAttributes.isDirectory() ); // 是否目录
		
		System.out.println( basicAttributes.isRegularFile() ); // 是否是普通文件
		// Linux / Unix / macOS 中支持 创建 文件或目录 的  软连接 和 硬链接
		System.out.println( basicAttributes.isSymbolicLink() ); // 是否是链接文件
		System.out.println( basicAttributes.isOther() ); // 是否是其它文件
		
		if( !basicAttributes.isDirectory() ) {
			System.out.println( basicAttributes.size() ); // 如果是文件则返回文件体积
		}
		
		// 对于 fileKey 方法的返回值来说，在 Unix/Linux/masOS 系统中，可能是 (dev=1000007,ino=8618615257)
		// 而在 Windows 系统中则可能是 null
		System.out.println( basicAttributes.fileKey() );
		
	}

}
